package com.zzyl.common.ai;

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.ResponseFormatJsonObject;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class AIModelInvoker {
    @Autowired
    private BaiduAIProperties baiduAIProperties;


    public String qianfanInvoker(String prompt) {
        OpenAIClient client = OpenAIOkHttpClient.builder()
                .apiKey(baiduAIProperties.getApiKey())
                .baseUrl(baiduAIProperties.getBaseUrl())
                .build();

        ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()//创建 ChatCompletionCreateParams 对象，用于封装调用AI对话模型的请求参数，同样使用建造者模式构建。
                .addUserMessage(prompt)//向对话请求中添加用户消息，prompt 是方法入参（用户输入的提问内容），作为本次对话的用户输入传递给AI模型。
                .model(baiduAIProperties.getModel())//指定要调用的AI模型名称，从配置类 baiduAIProperties 中动态获取（如 ernie-4.0-8k 等百度千帆支持的模型）
                .responseFormat(ChatCompletionCreateParams.ResponseFormat.ofJsonObject(ResponseFormatJsonObject.builder().build()))//设置AI模型的响应格式为JSON对象。
        //通过 ResponseFormat.ofJsonObject(...) 显式指定响应格式为JSON，确保模型返回结构化的JSON数据，便于后续解析处理。
                .build();


        ChatCompletion chatCompletion = client.chat().completions().create(params);
        return chatCompletion.choices().get(0).message().content().orElseGet(() -> "");
    }
}